Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TimLine栏的布局管理器_Java_Swing_Layout - Fatal编程技术网

Java TimLine栏的布局管理器

Java TimLine栏的布局管理器,java,swing,layout,Java,Swing,Layout,我正在尝试创建一个时间轴小部件,一个水平条 class TimeBar extends JPanel { public TimeBar(List<TimeRange> ranges) { .... } } 类时间条扩展了JPanel{ 公共时间条(列表范围){ .... } } 左边缘表示00:00,右端表示23:59。我必须用不同的颜色标记这个条的一些部分(时间范围)列表时间范围(例如{10:34-12:49,红色},{13:31-17:03,蓝色})。时间范围之间

我正在尝试创建一个时间轴小部件,一个水平条

class TimeBar extends JPanel {
  public TimeBar(List<TimeRange> ranges) {
  ....
  }
}
类时间条扩展了JPanel{
公共时间条(列表范围){
....
}
}
左边缘表示00:00,右端表示23:59。我必须用不同的颜色标记这个条的一些部分(时间范围)<代码>列表时间范围(例如{10:34-12:49,红色},{13:31-17:03,蓝色})。时间范围之间不存在重叠

该条应可延伸(当主机改变大小时),但其最小尺寸应为700 x 25。时间范围面板应可单击

我已经实现了对TimeBarPanel使用setLayout(null)和对TimeRangeMpanel使用setSize和setLocation。当TimeBarPanel更改大小时,我重新输入TimeBarPanel的大小和位置。但是,手动设置位置而不是使用LayoutManager进行设置并不是很好的做法

public class TimeRange { 
   Date startTime,
   Date endTime,
   Color color
} 

public class TimeBar extends JPanel
{
    private List<TimeRange> ranges;

    public TimeBar( List<TimeRange> ranges) {
    this.ranges = ranges;
        setLayout( null );
        setBackground( Color.GRAY );
        setMinimumSize( new Dimension( 720, 25 ) );

       for(TimeRange range : ranges  ) {
           int startX = calculateStartPoint(range);
           int widthX = calculateWidth(range)
           TimeRangePanel panel =  new TimeRangePanel(startX, widthX, range.color)
           add(panel);   
       }
    }
}

public class TimeRangePanel extends JPanel 
{
     public TimeRangePanel(int startX, int widthX, Color color) {
    setBackground(color);
    setSize(widthX, HEIGHT);
        setLocation(startX, 0 );
        setBounds(new Rectangle(new Point(startX, 1), getPreferredSize())); 
     }
}
公共类时间范围{
日期开始时间,
日期结束时间,
颜色
} 
公共类时间条扩展了JPanel
{
私人名单范围;
公共时间条(列表范围){
这个。范围=范围;
setLayout(空);
挫折地面(颜色:灰色);
设置最小尺寸(新尺寸(720,25));
用于(时间范围:范围){
int startX=计算起始点(范围);
int widthX=计算宽度(范围)
TimeRangePanel=新的TimeRangePanel(startX,widthX,range.color)
添加(面板);
}
}
}
公共类时间范围面板扩展了JPanel
{
公共时间范围面板(int startX、int widthX、彩色){
挫折背景(颜色);
设置尺寸(宽度x,高度);
设置位置(startX,0);
setBounds(新矩形(新点(startX,1),getPreferredSize());
}
}

哪种布局管理器是实现此功能的最佳布局管理器

这将取决于你在时间表上的内容。如果是固定时段(小时、半小时等),则
GridLayout
将是最简单的选项

如果要使多个项目重叠,那么
TableLayout
gridbagloayout
是很好的选择

几乎任何情况下,使用某种类型的布局管理器都比不使用布局管理器要好。但是,如果您确实需要一些新奇的东西,并且不需要时间轴上的组件,您可以考虑创建一个自定义组件,该组件覆盖
paintComponent
,以绘制具有高亮显示范围的时间轴

有关建议布局的更多信息,请参阅教程或链接:

这将取决于你在时间表上的内容。如果是固定时段(小时、半小时等),则
GridLayout
将是最简单的选项

如果要使多个项目重叠,那么
TableLayout
gridbagloayout
是很好的选择

几乎任何情况下,使用某种类型的布局管理器都比不使用布局管理器要好。但是,如果您确实需要一些新奇的东西,并且不需要时间轴上的组件,您可以考虑创建一个自定义组件,该组件覆盖
paintComponent
,以绘制具有高亮显示范围的时间轴

有关建议布局的更多信息,请参阅教程或链接:

如果是GridBagLayout,请写信告诉我GridBagConstants的样子。我已经计算了每个时间范围面板的宽度和起点。我用一些链接更新了我的答案。听起来你在问一个关于如何使用GridBagLayout的新问题。关于GridBagLayout,你可以写信告诉我GridBagConstants是什么样子的吗。我已经计算了每个时间范围面板的宽度和起点。我用一些链接更新了我的答案。听起来你在问一个关于如何使用GridBagLayout的新问题。