将类专用于特定的Swing组件时,extend
对该特定组件更好,还是在内部构造并提供引用?
public class Foo extends JComponent{
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Foo{
public JComponent getComponent(){
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这就是我所说的奉献精神
public class Foo{
private static Foo INSTANCE;
public static Foo getInstance(){
if(INSTANCE == null){
INSTANCE = new Foo();
}
}
public void createAndShowComponent(){
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在里面createAndShowComponent()
,我创建了一个JComponent
包含所有组件及其各自的侦听器,而不暴露我刚创建的组件的内部.
这是一个例子
JPanel panel = new JPanel(){
@Override
protected void paintComponent(Graphics g){
// do stuff
}
@Override
public Dimension getPreferredSize(){
// do stuff
}
};
Run Code Online (Sandbox Code Playgroud)
这只是一个匿名内部类的变体,还是完全不同的东西?
我想从中更改内置的java图标JFileChooser
.JFrame
class有一个setIconImage()
set icon的设置方法.但我找不到类似的东西JFileChooser
.在不更换咖啡杯的情况下,任何人都可以轻松识别我的软件是用java制作的.任何人都可以帮我避免这个吗?
我想设置文本上方和下方一个JButton
的图标.目前,为了实现这一点,我覆盖了布局管理器并使用了三个JLabel
实例(即2个用于文本,1个用于图标).但这似乎是一个肮脏的解决方案.
有更直接的方法吗?
注意 -
我不是在寻找多线解决方案,我正在寻找一种多标签解决方案.虽然这条是指它作为一个多行的解决方案,它实际上似乎是指一个多标签解决方案.
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public final class JButtonDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI(){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(new JMultiLabelButton());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true); …
Run Code Online (Sandbox Code Playgroud) 我想说我有一个List.在for循环中修改list的项目没有问题:
for (int i = 0; i < list.size(); i++) { list.get(i).setId(i); }
Run Code Online (Sandbox Code Playgroud)
但是我有一个SortedSet而不是list.我怎么能用它呢?谢谢
如果我这样做,
final class FooButton extends JButton{
FooButton(){
super("Foo");
addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
// do stuff
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我让this
引用隐含地逃脱了吗?
通过add
和手动交换组件后remove
,我调用validate()
容器.根据文件,
validate方法用于使容器再次布置其子组件.在显示容器后修改此容器的子组件(添加到容器中或从容器中删除,或更改布局相关信息)时,应调用它.
短语" 再次布置其子组件 "让我觉得容器会相应调整大小,但事实并非如此.相反,在调用之后validate()
,我还需要调用pack()
以查看其所有子组件.
为什么是这样?难道我做错了什么?
我试图理解一个java程序,它有一个代码段,如
for (final Document document : cluster.getDocuments()) {
if (documentsShown >= maxNumberOfDocumentsToShow) {
break;
}
displayDocument(level + 1, document);
documentsShown++;
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着cluster.getDocuments()
必须是迭代器对象?
我有10个JLabels
我想拥有相同的边框.这是一个可以手工管理的数字,但作为一个程序员,我想知道是否有办法让这更容易.
我尝试过为每个循环实现标签所在面板的所有组件,然后使用该方法setBorder(...)
.但这显然不起作用,因为对象被识别为组件而不是JLabel.
如何自动将边界分配到JLabel
?
这是我目前使用的存储过程的伪代码,
CREATE PROC uspFoo
(
@id int,
@type nvarchar(255),
@status bit output
)
AS
IF ....
SET @status=1
ELSE
SET @status=0
GO
Run Code Online (Sandbox Code Playgroud)
执行此存储过程时,我被迫传递一个输出参数,该参数将存储其返回值,
DECLARE @id int, @type nvarchar(255), @status bit
SET @id=..
SET @type=..
EXEC uspFoo @id, @assayType, @status output
PRINT @status
GO
Run Code Online (Sandbox Code Playgroud)
返回值,或者在这种情况下status
,将为0(假)或1(真).
如何bit
直接返回值(例如)而不必将其存储在临时输出参数中?
java ×9
swing ×5
border ×1
constructor ×1
containers ×1
extend ×1
icons ×1
iterator ×1
jbutton ×1
jcomponent ×1
jfilechooser ×1
jlabel ×1
resize ×1
return-value ×1
sortedset ×1
sql ×1