我程序中的Perl代码片段给出了错误的结果.
$condition ? $a = 2 : $a = 3 ;
print $a;
Run Code Online (Sandbox Code Playgroud)
无论价值$condition
是什么,输出总是3,怎么样?
我正在尝试实现本教程中描述的自定义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) 我试图使用以下方法冻结方向:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)
虽然显示屏保持纵向,但仍会重新创建活动.任何想法如何解决这个问题?
如何锁定应用程序的方向,以便在方向更改时不重新创建活动?
我知道WeakReference
,如果我做了WeakReference
一些东西,除非直接引用它,它将是下一个GC循环收集的垃圾.我的问题是,如果我做出ArrayList
的WeakReference
S'
例如:
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();
.
如果这是重复,我没有在谷歌中找到我的关键字.
我在我的应用程序中使用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) 在我前几年的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惯例告诉我不要,我不会.
有人可以告诉我,初始化是否更好,或者只是推断它是空的
我想,以取代GridBagLayout
用MigLayout
.问题是,如果我调用obj.setVisible(false)
某个对象GridBaglayout
,布局会缩小.但MigLayout
它仍然隐藏着.你知道某种MigLayout
表演方式GridBagLayout
吗?
脚本:
#!/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)
问题:为什么会出现语法错误?
我想要在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"之间的空间?
让我们说我们<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
仍指向节点 …