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的新问题。