- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 GridBagLayout 创建 JDialog,但我无法让事情看起来像我想要的那样。我是否使用了错误的布局模型?我的代码是:
import java.awt.Dialog;
import java.awt.Dialog;
import java.awt.GridBagLayout;
import java.text.NumberFormat;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class alertDialog {
JDialog dialog=null;
private GridBagLayout layout=new GridBagLayout();
private NumberFormat tempFormat = NumberFormat.getIntegerInstance();
public alertDialog(String type_,TimelineRecord timeLine_) {
dialog=new JDialog();
dialog.setTitle("Alert");
dialog.setSize(600, 200);
dialog.setLayout(layout);
dialog.setModalityType(Dialog.ModalityType.MODELESS);
dialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Monitor mon=timeLine_.monitor;
int row=1;
JLabel msg=new JLabel();
if (type_.equals("Temperature")) {
msg.setText(mon.getName()+" temperature has been reached");
}
else {
msg.setText(type_);
}
JButton dismiss=new JButton("Dismiss");
dismiss.addActionListener(new delayButton(timeLine_,dialog));
JButton delay5=new JButton("Delay 5 Minutes");
delay5.addActionListener(new delayButton(5,timeLine_,dialog));
JButton delay10=new JButton("Delay 10 Minutes");
delay10.addActionListener(new delayButton(10,timeLine_,dialog));
JButton delay15=new JButton("Delay 15 Minutes");
delay15.addActionListener(new delayButton(15,timeLine_,dialog));
dialog.add(msg,makeGbc(0,row++));
dialog.add(dismiss,makeGbc(1,row++));
if (mon!=null) {
JLabel currentTemp=new JLabel("Current Temperature");
JLabel newTarget=new JLabel("New Target");
JFormattedTextField temp=new JFormattedTextField(tempFormat);
temp.setText(Double.toString(mon.current));
JFormattedTextField target=new JFormattedTextField(tempFormat);
target.setText(Double.toString(mon.target));
dialog.add(currentTemp,makeGbc(0,row));
dialog.add(temp,makeGbc(1,row));
dialog.add(newTarget,makeGbc(2,row));
dialog.add(target,makeGbc(3,row++));
}
dialog.add(delay5,makeGbc(0,row));
dialog.add(delay10,makeGbc(1,row));
dialog.add(delay15,makeGbc(2,row));
dialog.setVisible(true);
}
public static void main(String[] args) {
TimelineRecord timeline=new TimelineRecord();
new alertDialog("tod",timeline);
}
}
这是时间线记录:
import java.util.Timer;
public class TimelineRecord {
// text of event to take place (Saved to XML)
public String eventText;
// time of day for alarm (Saved to XML)
public String tod;
// target temp for alarm (Saved to XML)
public double targetTemp;
// pit temp to change to (Saved to XML)
public double pitTemp;
// meat type
public String meat;
// weight of meat
public double weight;
// Average cook time for this probe in minutes (Saved to XML)
public long avgCookTime;
// total cook time in minutes
public long totalCookTime;
// associated monitor instance (ID saved to XML)
public Monitor monitor=null;
// associated pit probe instance (ID saved to XML)
public Monitor pit=null;
// timer for alarm instance
public Timer timer=null;
// actual time of event
public String actualTod;
// actual temp at event
public double actualTemp;
// actual pit temp at event
public double actualPitTemp;
// Method to set variables
public void setObject(String obj_,String value_) {
switch(obj_) {
case "eventText": eventText=value_;
break;
case "tod": tod=value_;
break;
case "targetTemp": if (!value_.equals("")) {
targetTemp=Double.parseDouble(value_);
}
break;
case "pitTemp": if (!value_.equals("")) {
pitTemp=Double.parseDouble(value_);
}
break;
case "meat": meat=value_;
break;
case "weight": if (!value_.equals("")) {
weight=Double.parseDouble(value_);
}
break;
}
}
}
听众:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
public class delayButton implements ActionListener {
private int delay=0;
private TimelineRecord timeLine=null;
private JDialog dialog=null;
public delayButton(int minutes_,TimelineRecord timeLine_,JDialog dialog_) {
delay=minutes_;
timeLine=timeLine_;
dialog=dialog_;
}
public delayButton(TimelineRecord timeLine_,JDialog dialog_) {
timeLine=timeLine_;
dialog=dialog_;
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (delay==0) {
System.out.println("Got dismiss for "+timeLine.monitor.getName());
}
else {
System.out.println("Got "+Integer.toString(delay)+" minute delay for "+timeLine.monitor.getName());
}
dialog.dispose();
}
}
以及 GBC 生成器:
public static GridBagConstraints makeGbc(int x, int y) {
GridBagConstraints gbc = new GridBagConstraints();
Insets WEST_INSETS=new Insets(5,0,5,5);
Insets EAST_INSETS=new Insets(5,5,5,0);
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = (x == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL;
gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS;
gbc.weightx = (x == 0) ? 0.1 : 1.0;
gbc.weighty = 1.0;
return gbc;
}
第一行可以是任意长度,所以我希望它根据长度居中。第二行的按钮应该居中。奇怪的是,最后一行中第一个按钮的高度与其他按钮不同。它们应该都是相同的。
最佳答案
试试这个
import javax.swing.*;
import java.awt.*;
public class AlertDialog extends JDialog {
public AlertDialog(Frame owner) {
super(owner);
createGUI();
}
public AlertDialog(Dialog owner) {
super(owner);
createGUI();
}
private void createGUI() {
JLabel label = new JLabel("My Label");
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
topPanel.add(label);
JButton button = new JButton("Button");
JPanel centerPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
centerPanel.add(button, c);
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
JPanel bottomPanel = new JPanel(new GridLayout(0, 3));
bottomPanel.add(button1);
bottomPanel.add(button2);
bottomPanel.add(button3);
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
add(centerPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
pack();
setLocationRelativeTo(getParent());
}
}
以及带有一个面板的版本
import javax.swing.*;
import java.awt.*;
public class AlertDialog extends JDialog {
public AlertDialog(Frame owner) {
super(owner);
createGUI();
}
public AlertDialog(Dialog owner) {
super(owner);
createGUI();
}
private void createGUI() {
JLabel label = new JLabel("My Label");
JButton button = new JButton("Button");
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 3;
add(label, c);
c.gridy++;
c.weightx = 1.0;
c.weighty = 1.0;
add(button, c);
c.gridy++;
c.gridwidth = 1;
c.weighty = 0.0;
c.fill = GridBagConstraints.HORIZONTAL;
add(button1, c);
c.gridx++;
add(button2, c);
c.gridx++;
add(button3, c);
pack();
setLocationRelativeTo(getParent());
}
}
在您的代码中,调整最后一行第一个按钮的大小 (x = 0)
gbc.fill = (x == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL
关于java - JDialog GridBagLayout 没有产生我想要的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46565182/
如何在另一个 JDialog 中添加 JDialog? 最佳答案 JDialog secondDialog = new JDialog(this); // ("this" is the first J
我有一个 JDialog,其中有一个可打开新窗口的按钮。我想要做的是每当其他窗口打开时阻止此 JDialog。当我说阻止时,我的意思是用户无法操纵它,无法移动它或最大化或任何东西。 顺便问一下,对于带
我有一个从 JFrame 上的按钮打开的父 JDialog。父 JDialog 本身有一个从父对话框上的按钮打开的子 JDialog。当我关闭父对话框并使用框架上的按钮再次打开它时,我不希望子对话框也
抱歉这个奇怪的标题,但这是解释。所以我有一个带有学生列表的 StudentRepository 类,这些学生是在 GUI 上选择的(通过 TableModel)。学生对象的属性是: int stude
我有一个未修饰的模态 JDialog,当用户在模态对话框外单击时,我想将其设置为 setVisible(false)。 这在 Swing 中可能吗? 我正在做的是为日期选择器之类的文本字段弹出一个自定
我有一个模式设置对话框,它是一个 JDialog。在这个设置窗口中,我放置了一些组件,包括一个按钮到另一个模态设置对话框,它也是一个 JDialog。我制作了它们 JDialogs,因为这是我所知道的
我只想在单击 JDialog 之外时关闭 JDialog import javax.swing.JDialog; import javax.swing.JLabel; public class Dia
我正在尝试重现我在多个应用程序中看到的功能:我有一个带有多个 JDialog 的 GUI 应用程序。我想轻松地将它们紧密地组织在屏幕上:当我移动一个 JDialog,并且它的一个边界变得“接近”(例如
对 Java 相当陌生,并且遇到了 z 顺序问题。我有一个旧版 Java 应用程序,它有一个主窗口 A,它会弹出一个模式 JDialog B。单击 B 上的按钮后,会弹出一个模式对话框 C。 对于从
我的应用程序中有多个 JDialogs 存储在 map 中。这些JDialogs都有 setModel(false); 当这些对话框失去焦点并且我想将特定的 JDialog 带到前面时,所有 JDia
我有一个扩展 JDialog 的类。当 JDialog 显示时,我单击其启动 Jframe 的显示按钮,但在关闭 JDialog 之前我无法访问 JFrame。当屏幕上存在 JDialog 时,如何访
场景是这样的我的 JFrame 有一个按钮,单击它会打开一个 JDialog,它是一个模型对话框。JDialog 有另一个按钮,我想打开另一个 JFrmae 点击它打开。 结果:另一个 Jframe
我有一个带有主 JFrame 的小型应用程序,它以模态方式打开 JDialog。在这个 JDialog 中,我启动了一个 javax.swing.Timer,它应该在 JDialog 关闭时停止。 p
如何将用户凭据传回到包含的 JFrame,以便 JFrame 知道特定用户? JFrame 有一个 main 方法。 包含的 JFrame 能否以某种方式从 Dialog 中获取用户? 当jbtOk
我基本上创建的是一个 JDialog,它在表单上有一个关键事件。因此,当例如按下空间时,它会做一些事情。在我在同一个对话框上创建一个可编辑的 JTextArea 之前,这种方法工作得很好。当我这样做时
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在构建我的第一个 gui,到目前为止一切正常,除了 JDialog 的故障。 .它在第一次使用时相应地接受名称和进程列表。但是当我把它拉回来输入新的输入时,它仍然没有响应。我认为这不是线程问题,因
如何创建一个 Modal JDialog,在任务正在处理时显示“正在加载”,并在超过 3 秒后显示? 最佳答案 为了扩展 Paul 的回答,SwingWorker 可以很好地运行您的后台任务。然后您可
该程序大部分运行正常,但没有打开任何窗口。它应该在桌面右下角显示一个小对话框。但是对于另一个人来说,编译相同的代码没有问题。我们有相同的 Java 运行时 (1.8_u40)。我该如何解决这个问题?
我正在使用 Eclipse 的 Window Builder 插件。 当我执行以下代码时,它正确显示JDialog。我原本希望 JDialog 也能显示在设计选项卡中(在设计时),但它不会。 pack
我是一名优秀的程序员,十分优秀!