时间日期管理器模拟问题

bakeloar 2008-02-19 12:31:08
别人提出来的问题,我解决了一部分,目前还有两问题没解决
1、在日期的那个JComboBox改变时,选中焦点的日期没了
2、空白空格应禁止选中
还有两个问题没有解决
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

class Frame1 extends JFrame {
JPanel contentPane;
JTable tab;
JPanel jpl;
JScrollPane sp;
JSpinner jsn;
JComboBox cmb;
JComboBox cmb2;
Calendar c=Calendar.getInstance();



public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
//contentPane.setLayout(null);
setSize(new Dimension(235, 210));
setTitle("Time");

cmb=new JComboBox();
for(int a=1;a<13;a++){
cmb.addItem(""+a);
}
cmb.setSelectedIndex(c.get(Calendar.MONTH));
cmb.setBounds(new Rectangle(93, 25, 39, 19));
cmb.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
timechange(cmb2.getSelectedIndex());
curChange();
}
});
cmb2=new JComboBox();
for(int a=1;a<c.getActualMaximum(Calendar.DATE)+1;a++){
cmb2.addItem(""+a);
}
cmb2.setSelectedIndex(c.get(Calendar.DAY_OF_MONTH)-1);

cmb2.setBounds(new Rectangle(155, 25, 43, 19));
cmb2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {

curChange();
tab.repaint();
}
});


SpinnerModel mode=new SpinnerNumberModel(c.get(Calendar.YEAR),1900,2099,1);
jsn=new JSpinner(mode);
jsn.setBounds(new Rectangle(17, 25, 53, 19));
jsn.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
timechange(cmb2.getSelectedIndex());
curChange();
}
});

tab=new JTable(CreateTable());
tab.setShowGrid(false);
tab.setSelectionMode(0);
tab.setCellSelectionEnabled(true);
tab.setSelectionBackground(Color.blue);
tab.setSelectionForeground(Color.decode("#E8E8E8"));

tab.setSurrendersFocusOnKeystroke(false);

tab.getTableHeader().setResizingAllowed(false);
tab.getTableHeader().setOpaque(false);
tab.getTableHeader().setBackground(Color.decode("#AABEF9"));
tab.getTableHeader().setReorderingAllowed(false);
tab.getTableHeader().setForeground(Color.decode("#E8E8E8"));

tab.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if(!tab.getValueAt(tab.getSelectedRow(),tab.getSelectedColumn()).toString().equals(""))
cmb2.setSelectedIndex(Integer.parseInt(tab.getValueAt(tab.getSelectedRow(),tab.getSelectedColumn()).toString())-1);
}
});

sp=new JScrollPane();
sp.setBorder(null);
sp.getViewport().add(tab);
sp.setBounds(14,55,198,100);
sp.setBorder(BorderFactory.createEmptyBorder());

jpl=new JPanel();
jpl.setLayout(null);
jpl.setBounds(new Rectangle(98, 170, 225, 200));
jpl.setBorder(BorderFactory.createEtchedBorder());
jpl.add(sp);
jpl.add(jsn);
jpl.add(cmb);
jpl.add(cmb2);
jpl.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK,1),"选择时间",5,5));
curChange();
contentPane.add(jpl);

this.addWindowListener(new WindowAdapter(){
public void windowDeactivated(WindowEvent e){
System.exit(0);
}
});
}
public DefaultTableModel CreateTable(){
String[] title={"日","一","二","三","四","五","六"};
Object[][] stu=new Object[5][7];
Vector data=new Vector();

c.set(Calendar.YEAR,Integer.parseInt(jsn.getValue().toString()));
c.set(Calendar.MONTH,cmb.getSelectedIndex());
c.set(Calendar.DATE,1);

for(int a=0;a<(c.get(Calendar.DAY_OF_WEEK)-1);a++){
data.add("");
}
for(int b=0;b<c.getActualMaximum(Calendar.DATE);b++){
data.add(""+(b+1));
}
for(int cc=0;cc<43-c.get(Calendar.DAY_OF_WEEK)-c.getActualMaximum(Calendar.DATE);cc++){
data.add("");
}
for(int a=0;a<5;a++){
stu[a][0]=data.get((a*7)+0);
stu[a][1]=data.get((a*7)+1);
stu[a][2]=data.get((a*7)+2);
stu[a][3]=data.get((a*7)+3);
stu[a][4]=data.get((a*7)+4);
stu[a][5]=data.get((a*7)+5);
stu[a][6]=data.get((a*7)+6);
}
DefaultTableModel d=new TableModelOfCellDiseditable();
d.setDataVector(stu,title);
return d;
}

public void curChange(){
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(jsn.getValue().toString()), cmb.getSelectedIndex(), cmb2.getSelectedIndex()+1);

int dateOfWeek = c.get(Calendar.DAY_OF_WEEK);

int weekOfMonth = c.get(Calendar.WEEK_OF_MONTH);
tab.changeSelection(weekOfMonth-1, dateOfWeek-1, true, false);

}



public void timechange(int index) {
tab.setModel(CreateTable());
cmb2.removeAllItems();
for(int a=1;a<c.getActualMaximum(Calendar.DATE)+1;a++){
cmb2.addItem(""+a);
}
if(cmb2.getItemCount()>=index+1){
cmb2.setSelectedIndex(index);
}else{
cmb2.setSelectedIndex(cmb2.getItemCount()-1);
}
}
}

class TableModelOfCellDiseditable extends DefaultTableModel{
TableModelOfCellDiseditable(){
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
/*
if (columnIndex == 0) { // 序列号不能修改
return false;
}
if(rowIndex < 5){ // 前5行不能修改
return false;
}
return true;
}
*/
return false;//所有单元格不允许编辑
}

}


public class Test{
public static void main(String [] args){
Frame1 f=new Frame1();
//f.setSize(100, 100);
f.setVisible(true);

}
}
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bakeloar 2008-02-20
  • 打赏
  • 举报
回复
好象没有什么效果
public boolean isCellSelected(int row,
int column){
return false;
}
我把所有的都设有false还是可以选中呀


请问下isCellSelected是在DefaultTableModel下吗?
白云冰河 2008-02-20
  • 打赏
  • 举报
回复
第二个问题,自己重写jtable的isCellSelected方法
bakeloar 2008-02-20
  • 打赏
  • 举报
回复
第一个问题解决,如楼上所说的把参数改成tab.changeSelection(weekOfMonth - 1, dateOfWeek - 1, false, false);就搞定
白云冰河 2008-02-20
  • 打赏
  • 举报
回复
isCellSelected是JTable的方法,重写之后小单元格选是可以选,但是不会变色
白云冰河 2008-02-19
  • 打赏
  • 举报
回复
第一个问题参数错误,应该为
tab.changeSelection(weekOfMonth - 1, dateOfWeek - 1, false, false);
rain_night 2008-02-19
  • 打赏
  • 举报
回复
很遗憾没达到楼主的要求第1问还没解决
第2问我是通过将其选中并该为白色的简单代替

tab.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
int i = Integer.valueOf((tab.getValueAt(tab.getSelectedRow(),
tab.getSelectedColumn()).toString()) + 0);
System.out.println(i);
if (i == 0) {
tab.setSelectionBackground(Color.white);
tab.setUpdateSelectionOnSort(true);
} else
// if(tab.getValueAt(tab.getSelectedRow(),
// tab.getSelectedColumn()).toString().equals("")){
// tab.setSelectionBackground(Color.white);
// }
// if (!tab.getValueAt(tab.getSelectedRow(),
// tab.getSelectedColumn()).toString().equals(""))
{
cmb2.setSelectedIndex(Integer.parseInt(tab.getValueAt(
tab.getSelectedRow(), tab.getSelectedColumn())
.toString()) - 1);
tab.setSelectionBackground(Color.blue);
}
}
});

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧