小编Flo*_*yle的帖子

Perl三元条件运算符问题中的赋值

我程序中的Perl代码片段给出了错误的结果.

$condition ? $a = 2 : $a = 3 ;
print $a;
Run Code Online (Sandbox Code Playgroud)

无论价值$condition是什么,输出总是3,怎么样?

perl conditional-operator operator-precedence

40
推荐指数
3
解决办法
5780
查看次数

如何在jtable单元格中包装行?

我正在尝试实现本教程中描述的自定义TableRenderer .我想让渲染器换行包装给定单元格的每个文本.这个想法是,使用TextArea作为渲染器,因为它支持换行.但是,以下代码的行为不符合预期:

public class LineWrapCellRenderer  extends JTextArea implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            JTable table,
            Object value,
            boolean isSelected,
            boolean hasFocus,
            int row,
            int column) {
        this.setText((String)value);
        this.setWrapStyleWord(true);            
        this.setLineWrap(true);         
        return this;
    }

}
Run Code Online (Sandbox Code Playgroud)

我用这个渲染器设置了

table.setDefaultRenderer(String.class, new LineWrapCellRenderer());
Run Code Online (Sandbox Code Playgroud)

但是细胞条目仍未解开.如果我添加this.setBackground(Color.YELLOW)到该getTableCellRendererComponent()方法,所有单元格都按预期为黄色,但未包装.

有任何想法吗?

更新:正如Michael Borgwardt在评论中所述,问题不在于换行,​​而是行高:JTables行是固定大小的,所以如果单元格越来越高(因为文本现在是多行的),我们必须增加行高.但是多少钱?我会检查这是否值得另一个SO问题.如果没有,我会在这里添加此解决方案.

Update2:以下代码将确定行高(如果放入getTableCellRendererComponent()):

int fontHeight = this.getFontMetrics(this.getFont()).getHeight();
int textLength = this.getText().length();
int lines = textLength / this.getColumns() +1;//+1, cause we need at least 1 row.           
int height = fontHeight * …
Run Code Online (Sandbox Code Playgroud)

java swing jtable

31
推荐指数
2
解决办法
5万
查看次数

应用方向(横向或纵向)如何锁定?

我试图使用以下方法冻结方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

虽然显示屏保持纵向,但仍会重新创建活动.任何想法如何解决这个问题?

如何锁定应用程序的方向,以便在方向更改时不重新创建活动?

android screen-orientation

13
推荐指数
1
解决办法
1万
查看次数

android - java - 带有ArrayList的WeakReferences?

我知道WeakReference,如果我做了WeakReference一些东西,除非直接引用它,它将是下一个GC循环收集的垃圾.我的问题是,如果我做出ArrayListWeakReferenceS'

例如:

ArrayList<WeakReference<String>> exArrayList;
exArrayList = new ArrayList<WeakReference<String>>();
exArrayList.add(new WeakReference<String>("Hello"));
Run Code Online (Sandbox Code Playgroud)

我现在可以访问数据了exArrayList.get(0).get().

我的问题变成了:这是WeakReference数据,exArrayList.get(0)下一个GC循环中的数据是否会被GC进行?(即使我没有另外直接引用它)或者这个特定的参考是否会一直存在直到arraylist被清空?(例如:) exArrayList.clear();.

如果这是重复,我没有在谷歌中找到我的关键字.

java android garbage-collection weak-references arraylist

10
推荐指数
2
解决办法
1万
查看次数

如何保持JTextArea的大小不变?

我在我的应用程序中使用JTextArea的对象来处理发送短信.

我使用了DocumentFilter,只允许在textarea中输入160个字符,但是现在,我希望textarea的大小是常量.如果我不按"输入"键继续写在同一条线上,或者即使我只按下按键,它也会继续增加Enter.我尝试过使用'滚动条',但问题仍然存在.建议我这个.以下是我的代码.请检查一下.

class Send_sms extends JPanel implements ActionListener,DocumentListener    
{     
    JButton send;  
    JTextArea smst;  
    JLabel title,limit;  
    JPanel mainp,titlep,sendp,wrap,titlewrap,blankp1,blankp2,sendwrap;   
    JScrollPane scroll;  
    Border br,blackbr;  
    Boolean flag = false;  
    PlainDocument plane;
    public static final int LINES = 4;  
    public static final int CHAR_PER_LINE = 40;     
       //character limit 160 for a sms  

    public Send_sms()
        {
        br = BorderFactory.createLineBorder(Color.RED);
        blackbr = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,Color.DARK_GRAY,Color.GRAY);
        setBorder(blackbr);

                title = new JLabel("Enter the text you want to send!");
        title.setFont(new Font("",Font.BOLD,17));
        limit = new JLabel(""+charCount+" Characters");
        smst = new JTextArea(LINES,CHAR_PER_LINE); …
Run Code Online (Sandbox Code Playgroud)

java swing textarea

7
推荐指数
2
解决办法
2万
查看次数

Java初始分配

在我前几年的C++开发中,我知道总是用某些东西初始化变量是一种惯例.

我把这个约定带到了Java,以及我使用的任何其他编程语言.

我使用IntelliJ IDEA,我对它非常满意,并且通常遵循其编程指南和警告,但是我得到了这个警告:

public String getText(By by) {
    String text = null; // Variable `text` initializer `null` is redundant

    WebElement ele = findElement(by);
    highlightIfDemoMode(ele);

    String tagName = ele.getTagName();
    if (tagName.equals("input")  ||
        tagName.equals("select"))
        // For field elements, the text is actually held in values, not the text.

        text = ele.getAttribute("value");
    else
        text = ele.getText();

    return text;
}
Run Code Online (Sandbox Code Playgroud)

现在显然,在Java中,

String text;
// is the *exact* same thing as..
String text = null;
Run Code Online (Sandbox Code Playgroud)

考虑到IntelliJ非常擅长遵循编程约定,我是否应该忽略我的惯例,不要在Java中初始化我的变量?我觉得它更干净,但如果Java惯例告诉我不要,我不会.

有人可以告诉我,初始化是否更好,或者只是推断它是空的

java intellij-idea

6
推荐指数
1
解决办法
4038
查看次数

强制MigLayout像GridBagLayout一样缩小隐藏对象

我想,以取代GridBagLayoutMigLayout.问题是,如果我调用obj.setVisible(false)某个对象GridBaglayout,布局会缩小.但MigLayout它仍然隐藏着.你知道某种MigLayout表演方式GridBagLayout吗?

java layout user-interface swing miglayout

5
推荐指数
1
解决办法
889
查看次数

BeautifulSoup:print(s.find_all(class ="title"))SyntaxError:语法无效

脚本:

#!/usr/bin/python3.2
from bs4 import BeautifulSoup as bs

content = '<p class="title">hello world</p>'

s = bs(content)
print(s.find_all(class="title"))
Run Code Online (Sandbox Code Playgroud)

输出:

  File "bs.py", line 7
    print(s.find_all(class="title"))
                         ^
  SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

BS Docs:

soup.find_all(id="link2")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
Run Code Online (Sandbox Code Playgroud)

问题:为什么会出现语法错误?

python

5
推荐指数
1
解决办法
1055
查看次数

mig layout - span和grow/push spacing

我想要在2行上布置3个组件,以便底部组件和右上组件使用所有可用的水平空间.

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLayout(new MigLayout("debug, fill"));
Container cp = frame.getContentPane();
cp.add(new JTextField("component 1"), "");
cp.add(new JTextField("component 2"), "growx,push,wrap");
cp.add(new JTextField("component 3"), "span,growx,push");
frame.pack();
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

考虑到上述情况,如何在调整框架大小时停止显示"组件1"和"组件2"之间的空间?

空间问题的例子

java swing miglayout

3
推荐指数
1
解决办法
3689
查看次数

删除并发hashmap中的条目时发生内存泄漏

让我们说我们<k,v>从中删除一个条目ConcurrentHashMap.remove操作ConcurrentHashMap将克隆必须删除的节点之前的节点.

现在我的问题是Java垃圾如何收集必须删除的节点之前的原始节点.

让我们说1---> 2---> 3---> 4---> 5---> 6是一个由其维护的hashentry列表ConcurrentHashMap.现在我们要删除3.

以下代码是Java中remove方法的代码片段 ConcurrentHashMap

HashEntry newFirst = e.next;
for (HashEntry p = first; p != e; p = p.next) {
    newFirst = new HashEntry(p.key, p.hash, newFirst, p.value);
    tab[index]= newFirst;
}
Run Code Online (Sandbox Code Playgroud)
  • 第一次迭代后

    1---> 2---> 3---> 4---> 5--->6

    1A---> 2A---> 4---> 5--->6

    1A将创建一个指向的新节点4.原始节点3仍指向节点 …

java memory-leaks concurrenthashmap

2
推荐指数
1
解决办法
179
查看次数