是这样的,我有一个JTable,双击单元格后,后台创建一个DateWindow类,这个类会先弹出个JOptionPane输入文本,再弹出个写好的JFrame,也是输入几项文本,然后利用得到的输入数据创建一个DateText类实例,添加到JTable里去。但是每次都是先执行了添加DateText实例到JTable中,然后再弹出窗口输入的……怎么才能倒过来呢?
解决方案 »
- C语言、c++、java还是c#?如何取舍?迷茫啊!
- 有关classpath的问题。求解决的办法!
- Java 里面有没有获取 本机 DNS 的类和方法?
- jna debug
- 使用WIN CVS时遇到的问题,请帮忙。。。。
- java.io.NotSerializableException 这是个什么异常啊?
- 那里有Java Network Programming下载?一定给分
- 我写的像数据库提交图片的程序,但是不成功,强各位大虾帮忙分析一下,谢谢!!
- 这里的斑竹很幽默
- scanner输入中文问题
- 如何读取pdf文件
- 解决JNA调用动态库出现java.lang.UnsatisfiedLinkError问题
您能具体给我讲讲么 我初学swing
public DateWindow(){
// content = JOptionPane.showInputDialog(null,content,"new Date",JOptionPane.OK_CANCEL_OPTION);
}
class Window implements Runnable{
public Window(){
detailed.setLayout(new GridLayout(6,2));
detailed.setForeground(Color.BLUE);
detailed.setSize(400, 230);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = detailed.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
detailed.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
detailed.setResizable(false);
detailed.setVisible(true);
detailed.add(titleL);
detailed.add(titleT);
titleL.setHorizontalAlignment(JLabel.CENTER); JPanel jtime = new JPanel();
jtime.setLayout(new BoxLayout(jtime, BoxLayout.X_AXIS));
detailed.add(time);
time.setHorizontalAlignment(JLabel.CENTER);;
jtime.add(yearT);
jtime.add(yearL);
jtime.add(monthT);
jtime.add(monthL);
jtime.add(dayT);
jtime.add(dayL);
jtime.add(hourT);
jtime.add(hourL);
detailed.add(jtime); detailed.add(duringTL);
duringTL.setHorizontalAlignment(JLabel.CENTER);
JPanel jduring = new JPanel();
jduring.setLayout(new GridLayout());
jduring.add(duringTT);
jduring.add(duringB);
detailed.add(jduring); detailed.add(locaL);
locaL.setHorizontalAlignment(JLabel.CENTER);
detailed.add(locaT); detailed.add(repeatL);
repeatL.setHorizontalAlignment(JLabel.CENTER);
detailed.add(repeatB);
JPanel jadd = new JPanel();
jadd.setLayout(new FlowLayout());
jadd.add(new JLabel(""));
jadd.add(jbAdd);
detailed.add(jadd);
JPanel jcan = new JPanel();
jcan.setLayout(new FlowLayout());
jcan.add(new JLabel(""));
jcan.add(jbCancel);
detailed.add(jcan);
jbCancel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
detailed.setVisible(false);
stop = "end";
}
});
jbAdd.addActionListener( new ActionListener(){
// public DateText dateDetailed;
public void actionPerformed(ActionEvent e){
DateWindow.dateDetailed.setTitle(titleT.getText());
DateWindow.dateDetailed.setYear(Integer.valueOf(yearT.getText().trim()));
DateWindow.dateDetailed.setMonth(Integer.valueOf(monthT.getText().trim())-1);
DateWindow.dateDetailed.setDay(Integer.valueOf(dayT.getText().trim()));
DateWindow.dateDetailed.setHour(Integer.valueOf(hourT.getText().trim()));
int duringt = Integer.valueOf(duringTT.getText().trim());
if(duringB.getSelectedItem()=="hour");
else if(duringB.getSelectedItem()=="day")
duringt = duringt*24;
else if(duringB.getSelectedItem()=="week")
duringt = duringt*24*7;
else;
DateWindow.dateDetailed.setDuringTime(duringt);
DateWindow.dateDetailed.setLocation(locaT.getText());
DateWindow.dateDetailed.setContent(contentT.getText());
DateWindow.dateDetailed.setRepeat(repeatB.getSelectedIndex());
stop = "end";
detailed.setVisible(false);
JOptionPane.showMessageDialog(null, "a new date has been added successful!");
}
});
}
public void run() {
// TODO Auto-generated method stub
while(true)
if(stop.equals("end"))
return;
}
}
public DateText init(){
Window mywindow = new Window();
try{
SwingUtilities.invokeAndWait(mywindow);
}catch(Exception e){
System.out.println(e);
}
return dateDetailed;
}然后在外部的mouseClick里面是这么写的:
if (e.getClickCount() == 2) {
Point p = e.getPoint();
int row = table.rowAtPoint(p);
int column = table.columnAtPoint(p);
content = JOptionPane.showInputDialog(null, content,
"new Date", JOptionPane.OK_CANCEL_OPTION);
if (content == null);
else {
DateWindow window = new DateWindow();
DateText add = window.init();
if(add == null );
else
weekModel.setValueAt(add, row, column);
}
弹出dialog的时候事件是挂起的,输入完毕之后才会继续,不需要程序控制import java.awt.*;
import java.awt.event.*;import javax.swing.*;
import javax.swing.table.TableColumn;
public class SwingTest extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public JPanel jp;
public JTable jt;
public SwingTest(){
super("test");
this.setFocusable(true);
this.addWindowListener(new WindowListener());
setLocation(200, 200);
setVisible(true);
init();
pack();
}
public void init(){
jp = new JPanel();
jt = new JTable(3,1);
jt.addMouseListener(new MyMouseListener());
TableColumn firsetColumn = jt.getColumnModel().getColumn(0);
firsetColumn.setPreferredWidth(150);
jp.add(jt);
getContentPane().add(jp);
}
public class MyMouseListener implements MouseListener{ @Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
int row = jt.rowAtPoint(p);
int column = jt.columnAtPoint(p);
String content = JOptionPane.showInputDialog(null, null,
"input as yyyyMMDD", JOptionPane.OK_CANCEL_OPTION);
if(content!=null){
DateWindow window = new DateWindow();
DateText add = window.init(content); jt.setValueAt(add, row, column);
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
public class DateWindow{
DateText init(String content){
return new DateText(content);
}
}
public class DateText{
String year = "";
String month = "";
String day = "";
public DateText(String content){
try{
year = content.substring(0,4);
month = content.substring(4,6);
day = content.substring(6,8);
}
catch(Exception e){
}
}
public String toString(){
return year+"年"+month+"月"+day;
}
}
public class WindowListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
public static void main(String[] args){
SwingTest gt = new SwingTest();
}
}