我试图在按下JDialoga 中的按钮时打开 a,并且该对话框应包含.JFrameJTable
我应该在哪里创建对话框(在框架内还是应该创建一个新类)?
我有一个由JFrame frm创建的JDialog dlg,它包含一个JList列表.当我修改列表(通过ListModel)时,列表本身被重新绘制,但不是JDialog.这意味着,如果我删除一行,列表将保留一个空行,而如果我添加一行,则不会显示此新行(因为对话框中没有空格),直到我手动强制重新绘制dlg(双击frm).
根据这篇文章中的建议: 如何在Swing中重新绘制JDialog?
我试图从我的控制器类(这是列表更新的位置)调用,如下所示:
SwingUtilities.getWindowAncestor(dlg).repaint();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我也尝试过:
dlg.repaint();
Run Code Online (Sandbox Code Playgroud)
没有运气......
任何线索?非常感谢你.
编辑:我的类的组织如下:一个控制器类,包含对主JFrame的引用,frm.我还将JDialog扩展为MyDialog,其中包含一个JList.当检测到双击frm时,我会显示MyDialog的实例(或创建,如果它是我第一次显示它),并且JList填充了传递给DefaultListModel的数据.绘制了MyDialog,使列表只有它所需的空间.现在,当控制器检测到特定事件时,我得到特定的MyDialog,从JList获取ListModel并更新它.这里JList确实更新了,但Dialog保持不变.我使用这样的代码:
MyDialog dlg = group.getDlg();
if(dlg != null){
DefaultListModel listModel = ((DefaultListModel) dlg.getMyJList().getModel());
listModel.addElement(idStock);
SwingUtilities.getWindowAncestor(dlg).repaint();
}
Run Code Online (Sandbox Code Playgroud)
这不会重绘dlg.我也尝试过:
SwingUtilities.getWindowAncestor(dlg.getMyJList()).repaint();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我检查了调试器实际执行的行.
我没有更多的代码可以显示,真的......
我有一个Gui,它允许用户单击一个按钮并查看文本文件的内容.问题是文件可能相当大(100,000多行数据),并且在表中读取和显示可能需要15秒以上.
文本文件格式的示例:
*/
Account ID : 8 digit number
Money Charged : Integer < $10
Values separated by \t
/*
Account Id Money Charged
---------- --------------
731298 3
359412 5
624937 1
Run Code Online (Sandbox Code Playgroud)
因此,当单击该按钮时,它会读取每一行并将每个ID放入一个地图中并增加帐户的费用.
完成后,它会将一个JTable放在一个带有信息的JDialog中.但是,只要单击该按钮,用户可能会对程序正在执行的操作感到困惑,因为在JDialog和JTable出现之前我已经经历了超过10-15秒的延迟.
那么有没有办法让JDialog显示一个字符串,让用户知道它正在创建表?(我认为它会使用的方法的JDialog如一个完成repaint()或validate但这些似乎并没有这样的伎俩.
这是我认为应该完成的顺序:
//Psuedo-code
actionPerformed {
create frame
display label that lets user know its creating table
read text file
create map and place values
remove label
update dialog with table // unsure what to do to update it properly
}
Run Code Online (Sandbox Code Playgroud)
所以我的整体问题很简单: 是否可以告知用户它当前正在计算数据(通过JDialog中的JLabel),一旦读取数据,就显示JTable(通过更新JDialog)? …
嗨我想按下jdialog的ok按钮时触发一些动作,我知道你可以这样做
int rep =JOptionPane.showConfirmDialog(null, pangesfac, "Gestion des chambres a facturer", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(rep == JOptionPane.OK_OPTION) {//actions to do}
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,当按下确定按钮时,我想要一个外部控制器来处理必须完成的事情(我的代码由mvc构成).那你如何在ok按钮上设置动作列表器呢?
我觉得奇怪的是,在我的项目中,并不总能听到mouselistener.还有其他人遇到过这个吗?或者我做错了什么?在打开之前我有时会多次点击它.我会在点击之间等待,看看它是否是性能问题.
JButton btnPin = new JButton("Pin");
btnPin.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
if(staffPinDialog == null || staffPinDialog.isShowing() == false)
staffPinDialog = new StaffPinDialog(idClicked);
}
});
Run Code Online (Sandbox Code Playgroud)
StaffPinDialog是一个JDialog,其中的引用已在其他地方创建.idClicked也始终初始化.
我的JDialog内部有个物件,JFrame我希望它与我的物件一起移动JFrame。因此,当用户在周围拖动窗口时,我希望窗口JDialog保持在同一位置。
我如何知道用户何时拖动JFrame或JDialog以便设置其他位置?还是有另一种方法?
我正在构建动态JDialogs.我有一些JPanels,当你选择一个菜单选项我创建一个模态JDialog,添加一个JPanel并显示它:
JDialog dlg = new JDialog(this, title, true);
dlg.getContentPane().add(panel);
dlg.pack();
dlg.setLocationRelativeTo(null);
dlg.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
我的应用程序运行良好,但JDialog的边框和添加的面板之间没有空间,它看起来非常"完整/拉伸"(对不起,我不知道该怎么说).也许问题是我正在调用JDialog.pack(),但是在运行时我不知道面板的大小,所以我创建了没有维度的JDialog,并且在添加内容后我将其打包.
我的问题是:我可以做些什么来增加面板周围的空间?
一种可能的解决方案是添加BorderLayout,将面板放在中心,每侧有4个固定尺寸的面板......但这看起来很难看......
我有一个奇怪的问题,我做了两个类(它们非常相似),但在第一个类中setPreferredSize方法,在另一个不工作; 所以我必须使用(在这个类中)setSize()方法.这真的很奇怪.我发布了我的代码:
在这个课程中,它运作良好
package StudentNotes;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import StudentNotes.TextPrompt.Show;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class CreateCourse extends JDialog {
private JTextField tFieldCourseName;
/**
* Create the dialog.
*/
public CreateCourse(JDialog mainFrame, final StudApp studAppObj) {
super(mainFrame, ModalityType.APPLICATION_MODAL);
setPreferredSize(new Dimension(330, 200)); //it works
setTitle("Create a course");
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); …Run Code Online (Sandbox Code Playgroud) 我有一个JFrame创建一个无模式的JDialog.在某些情况下(可能总是),我传递给JDialog构造函数,我希望JDialog保持可见但控制返回到调用JFrame.用户随后可以与JDialog交互或关闭.
我研究过,但还没有找到办法做到这一点.任何建议/帮助表示赞赏.
[10次召唤] [3]
经过更多的交互,JDialog结束于浮动标题栏.调整大小"重置"cicle.下面是JPanel中调用此JDialog的代码.不知道是什么让它变小了,只是在垃圾邮件发送此按钮后发现它.
public class Mant_presentacion extends JPanel implements ActionListener{
Boton buscar_envase = new Boton(this, new ImageIcon("lupa.png"));
Mant_env envase = new Mant_env();
public final JFrame OWNER;
public Mant_presentacion(JFrame OWNER){
this.OWNER = OWNER;
setLayout(null);
setBackground(Color.WHITE);
d = new JDialog(OWNER, "Seleccionar envase", true);
buscar_envase.setBounds(500, 50, 180, 30);
buscar_envase.setText(" Examinar envases");
buscar_envase.addActionListener(this);
}
JDialog d;
@Override
public void actionPerformed(ActionEvent e) {
d.setSize(envase.getWidth(), envase.getHeight());
d.add(envase);
d.setLocationRelativeTo(null);
d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
d.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)