启动java swing应用程序的最佳实践方法是什么?也许有另一种方法可以做到这一点.
我想知道我是否必须使用SwingUtilities类来启动应用程序(可能性)(第一种可能性).
public class MyFrame extends JFrame {
public void createAndShowGUI() {
this.setSize(300, 300);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// add components and stuff
this.setVisible(true);
}
public static void main(String[] args) {
// First possibility
MyFrame mf = new MyFrame();
mf.createAndShowGUI();
// Secound possibility
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame mf = new MyFrame();
mf.createAndShowGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
}
我正在尝试获得与其父级相关的组件坐标.例如,当我有一个JFrame的大小500×500,其中有一个孩子- 的JPanel -在[50,10]我应该得到[50,10]结果.无论看起来多么简单,我一直都会遇到错误的坐标([0,0]或[ 3,24 ]).
这是我的JPanel代码:
class MyPanel extends JPanel implements MouseListener {
private Component parent;
private String strName;
public MyPanel(Component pr, String name, int w, int h) {
super();
parent = pr;
strName = new String(name);
this.setLayout(null);
this.setSize(w, h);
this.setBackground(Color.WHITE);
this.addMouseListener(this);
this.setVisible(true);
}
/* MouseListener implementation */
public void mouseClicked(MouseEvent event) {
int x = event.getX(); int y = event.getY();
Point pnt = new Point(SwingUtilities.convertPoint(this, …Run Code Online (Sandbox Code Playgroud) 这个简单的问题让我很困惑.您可以通过设置frames的setVisible属性来显示JAVA GUI应用程序true.但在我在互联网上发现的几乎所有例子中,他们都使用一个单独的线程来做同样的事情.
他们这样做,
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Frame().setvisible(true); //just take the idea of this line
}
});
Run Code Online (Sandbox Code Playgroud)
我发现这两种方法没有区别.但必须有一些特殊的原因,这就是每个人都这样做的原因.
有人可以解释一下......谢谢!
我在另一个项目中遇到了这个问题,这个项目复杂的JPanels结构和很多代码.
在那里,我有一个以下片段
Point point = label.getLocation();
Point point2 = SwingUtilities.convertPoint(label.getParent(), point, panel);
Run Code Online (Sandbox Code Playgroud)
在动态选择标签和面板的地方,JLabel应该是JPanel的grand-grand -...- child.
那么为什么问题是在SwingUtilities.convertPoint()源和目的地有子父关系的情况下,在什么情况下可以返回负值?这有可能吗?
此代码演示了负坐标问题,但panel22不是标签的父级.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class NegativeLocation {
public static void main(String[] args) {
new NegativeLocation();
}
public NegativeLocation() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel panel1 = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new …Run Code Online (Sandbox Code Playgroud) 我在JScrollpane中有一个JTable.我无权访问JScrollpane变量.但我可以访问JTable.现在我如何使用JTable访问JScrollpane.
For Example -> mytable.getAncestor(...) or something?
Run Code Online (Sandbox Code Playgroud) 我想搜索JTree的特定节点并确定其在屏幕上的位置。我的目标是从该节点的左上角开始悬停鼠标,然后在我的JFC中单击鼠标。
谁能帮我这个?可能吗?
我正在使用Netbeans 7 IDE开发GUI桌面应用程序.当我创建JFrame类时,Netbeans使用
java.awt.EventQueue.invokeLater(new Runnable(){}
启动可运行对象.但我的应用程序也有摆动组件.
我想知道之间的区别
java.awt.EventQueue threads
Run Code Online (Sandbox Code Playgroud)
和
SwingUtilities threads
Run Code Online (Sandbox Code Playgroud)
用于GUI应用程序开发.
我搜索了这个论坛,但我找不到关于这个主题的很好的解释。和下面的说法有什么不同吗?哪种方式是触发此事件的更好方法?
if (evt.getButton() == 3)
Run Code Online (Sandbox Code Playgroud)
对比
if (SwingUtilities.isRightMouseButton(evt))
Run Code Online (Sandbox Code Playgroud) 我永远不明白SwingUtilities.invokeLater,这就是我一直避免它的原因.但是让Swing Thread安全是非常重要的.好吧请原谅,因为这是我第一次这样做.我试图在一些数据库查询后关闭窗口.所以,据我所知,任何更新UI必须由.处理.这SwingUtilities.invokeLater是我的工作:
主要:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new forminsert().setVisible(true);
forminsert f=new forminsert();
}
});
}
public forminsert() {
initComponents();
}
public class forminsert extends javax.swing.JFrame {
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setUndecorated(true);
jPanel1.setBackground(new java.awt.Color(0, 0, 0));
jPanel1.setBorder(javax.swing.BorderFactory.createMatteBorder(3, 3, 3, 3, new java.awt.Color(0, 204, 204)));
/////***REST …Run Code Online (Sandbox Code Playgroud) java ×10
swingutilities ×10
swing ×9
awt ×2
invokelater ×2
mouseevent ×2
event-queue ×1
jlabel ×1
jpanel ×1
jscrollpane ×1
jtable ×1
jtree ×1
point ×1
runnable ×1
swingworker ×1